package org.aplikator.client.local.widgets;

import com.github.gwtbootstrap.client.ui.RadioButton;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import org.aplikator.client.shared.data.ListItem;
import org.aplikator.client.shared.descriptor.PropertyDTO;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class RadioButtonWidget<T extends Serializable> extends DataFieldBase implements DataField<T> {
    private List<RadioButton> buttons;

    public RadioButtonWidget(String caption, PropertyDTO property) {
        super(caption, property);
        buttons = new ArrayList<RadioButton>(property.getListValues().size());
        
        for (Object obj : property.getListValues()) {
        	ListItem item = (ListItem) obj;
        	RadioButton button = new RadioButton(label.getTitle(), item.getName());
            //button.addStyleName(PaneWidgetResources.INSTANCE.css().formData());
            buttons.add(button);
            controls.add(button);
        }
    }

    public void setValue(T value) {
        for (int i = 0; i < getProperty().getListValues().size(); i++) {
            if (((ListItem)getProperty().getListValues().get(i)).getValue().equals(value)) {
                buttons.get(i).setValue(true, false);
            }   else  {
                buttons.get(i).setValue(false, false);
            }
        }
    }

    @SuppressWarnings("unchecked")
    public T getValue() {
        int index = -1;
        for (int i = 0; i < buttons.size(); i++) {
            if (buttons.get(i).getValue()) {
                index = i;
                break;
            }
        }
        if (index == -1) {
            return null;
        }
        return (T) ((ListItem)getProperty().getListValues().get(index)).getValue();
    }

    public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler) {
        // return box.addChangeHandler(handler);
        return null;
    }

    public void setEnabled(boolean enabled) {
        // box.setEnabled(enabled); //TODO iterate over buttons
    }



}
